一覧に戻る

GitHub Pagesを活用して擬似REST APIサーバーを作る

#Python#GitHub#WebAPI#REST-API#GithubPages

はじめに

Qiita - GitHub Actionsを活用して擬似APIサーバーを用意する こちらの記事で、Actionsを用いてjsonファイルを自動更新でき、それをPagesで読み込めるという事は、それはすなわち擬似的なAPIサーバーとして運用できるという事では、という提案をしました。 ただこれでは、膨大なデータのうち欲しいデータはごく一部なのに、毎回全部取得して、keyから辿っていく必要があります。

じゃあjsonファイルを分割すれば良かろう、どうやって?

REST API

Qiita - 0からREST APIについて調べてみた 巷でよく聞くREST API、これは要するにデータに準拠したURLルーティングの事だと理解出来ました、これを基準にして分割してみます。


{
    "data": [
        {
            "no": "1",
            "date": "2020-01-28T00:00",
            "place": "中国武漢市",
            "age": "40代",
            "sex": "女性"
        },
        {
            "no": "2",
            "date": "2020-02-14T00:00",
            "place": "札幌市",
            "age": "50代",
            "sex": "男性"
        }
    ],
    "last_update": "2020-03-14T23:14:01.849130+09:00"
}

ホスティングURLをhttp://{HOSTING}/とします。

取得するデータREST APIのURL
sample.jsonの全データhttp://{HOSTING}/sample
sample.jsonのlast_updatehttp://{HOSTING}/sample/last_update
sample.jsonのdataの1つ目の要素http://{HOSTING}/sample/data/0
sample.jsonのdataの2つ目の要素http://{HOSTING}/sample/data/1
sample.jsonのdataの2つ目の要素のnohttp://{HOSTING}/sample/data/1/no

となっていればRESTな訳です。

GitHub Pagesで擬似REST APIをつくる

GitHub Pagesでは、ディレクトリへのアクセスはindex.htmlへ差し向けられます。 つまり、http://{HOSTING}/sampleにアクセスした場合は、gh-pagesブランチのルート/sample/index.htmlにsample.jsonの全データを書き込んでおけば、欲しいデータのJSON文字列を返す訳です。 http://{HOSTING}/sample/last_updateの場合はルート/sample/last_update/index.htmlに「2020-03-14T23:14:01.849130+09:00」という文字列を書き込んでおく。

以上の手順でホスティングすれば、擬似的にREST APIサーバーが出来ていると言えるのではないでしょうか。

実装

Kanahiro/gh-pages-rest-api こちらのスクリプトは、masterへのプッシュ時にActionsによりmain.pyが実行されます。 main.pyは、jsonフォルダ内のjsonファイルを読み出して、gh-pagesに前述のとおり細分化されたディレクトリにindex.htmlを配置します。

上記リポジトリのjsonフォルダ内には前述のsample.jsonが格納されています。 gh-pagesのホスティングURLはhttps://kanahiro.github.io/gh-pages-rest-api/なので

取得するデータREST APIのURL
sample.jsonの全データhttps://kanahiro.github.io/gh-pages-rest-api/sample
sample.jsonのlast_updatehttps://kanahiro.github.io/gh-pages-rest-api/sample/last_update
sample.jsonのdataの1つ目の要素https://kanahiro.github.io/gh-pages-rest-api/sample/data/0
sample.jsonのdataの2つ目の要素https://kanahiro.github.io/gh-pages-rest-api/sample/data/1
sample.jsonのdataの2つ目の要素のnohttps://kanahiro.github.io/gh-pages-rest-api/sample/data/1/no

以下のとおり、masterへのプッシュ後に自動的にホスティングされます。 出来るリクエストはGETのみですが、まさしくREST APIがGitHub Pagesに実装されていると言えるのではないでしょうか。

そしてQiita - GitHub Actionsを活用して擬似APIサーバーを用意するで紹介したように、Actionsによるスケジューリングでjsonファイルを自動的に更新できれば、データが自動的に更新されるREST APIサーバーとなります。

再利用

  1. 上記のリポジトリをフォークする
  2. ホスティングしたいjsonをjsonフォルダに入れる
  3. masterにプッシュする(→自動的にgh-pagesにデータが出力される)

※手動でActionsとPagesをActivationする必要があります

注意事項

  • まだ作ったばかりなのでフロント側でちゃんと読み込めるか試していません
  • まだ作ったばかりなのでどんな不具合があるかわかりません
  • jsonのkeyは、英字のみを推奨(日本語でURLがどのようにエスケープされるか未確認)